package at.favre.lib.dali.util; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.ColorMatrix; import android.graphics.ColorMatrixColorFilter; import android.graphics.Matrix; import android.graphics.Paint; import android.util.Log; import java.io.File; import java.io.FileOutputStream; /** * Created by PatrickF on 26.05.2014. */ public class BitmapUtil { private static final String TAG = BitmapUtil.class.getSimpleName(); private BitmapUtil() {} public static void clearCacheDir(File cacheDir) { File[] files = cacheDir.listFiles(); if (files != null) { for (File file : files) file.delete(); } } public static Bitmap loadBitmapFromResId(int resId, Resources resources) { return BitmapFactory.decodeResource(resources, resId); } public static File saveBitmapDownscaled(Bitmap bitmap, String filename, String path, boolean recycle, int maxWidth, int maxHeight) { float heightScaleFactor = 1; float widthScaleFactor = 1; float scaleFactor = 1; if(bitmap.getHeight() > maxHeight) { heightScaleFactor = (float) maxHeight / (float) bitmap.getHeight(); } if(bitmap.getWidth() > maxWidth) { widthScaleFactor = (float) maxWidth / (float) bitmap.getWidth(); } if(heightScaleFactor < 1 || widthScaleFactor < 1) { scaleFactor = Math.min(heightScaleFactor,widthScaleFactor); } bitmap = Bitmap.createScaledBitmap(bitmap,(int) (bitmap.getWidth()*scaleFactor),(int) (bitmap.getHeight()*scaleFactor) ,true); return saveBitmap(bitmap,filename,path,recycle); } public static File saveBitmap(Bitmap bitmap, String filename, String path, boolean recycle) { FileOutputStream out=null; try { File f = new File(path,filename); if(!f.exists()) { f.createNewFile(); } out = new FileOutputStream(f); if(bitmap.compress(Bitmap.CompressFormat.PNG, 90, out)) { return f; } } catch (Exception e) { Log.e(TAG, "Could not save bitmap", e); } finally { try{ out.close(); } catch(Throwable ignore) {} if(recycle) { bitmap.recycle(); } } return null; } /** * Mirrors the given bitmap */ public static Bitmap flip(Bitmap src) { Matrix m = new Matrix(); m.preScale(-1, 1); return Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), m, false); } /** * * @param bmp input bitmap * @param contrast 0..10 1 is default * @param brightness -255..255 0 is default * @return new bitmap */ public static Bitmap changeBitmapContrastBrightness(Bitmap bmp, float contrast, float brightness) { ColorMatrix cm = new ColorMatrix(new float[] { contrast, 0, 0, 0, brightness, 0, contrast, 0, 0, brightness, 0, 0, contrast, 0, brightness, 0, 0, 0, 1, 0 }); Bitmap ret = Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), bmp.getConfig()); Canvas canvas = new Canvas(ret); Paint paint = new Paint(); paint.setColorFilter(new ColorMatrixColorFilter(cm)); canvas.drawBitmap(bmp, 0, 0, paint); return ret; } public static int getInSampleSizeFromScale(float scale, boolean keepPowOfTwo) { int insample = 1; float scaleThreshold = 1.f; while(scaleThreshold >= scale) { if(keepPowOfTwo) { insample *= 2; } else { insample += 1; } scaleThreshold = scaleThreshold / insample; } if(keepPowOfTwo) { return insample / 2; } else { return insample - 1; } } }